//获取接口数据
import {reqShopCartList,reqDeleteCartById,reqCheckCart} from "@/api"

//准备actions 用于响应组件中的动作
const actions={
    //购物车数据
   async getShopCartList({commit}){
       let result = await reqShopCartList();
       if(result.code==200){
        commit('GETSHOPCARTLIST',result.data)
       }
   },
   //删除购物车某一个产品
   async DeleteCartById({commit},skuId){
    let result = await reqDeleteCartById(skuId)
    //服务器没有返回多余的数据所以咱们不用在往下写三连环了
    if(result.code==200){
        return 'ok';
    }else{
        return Promise.reject(new Error('失败'))
    }
   },
   //修改购物车商品选中状态
   async getCheckCart({commit},{skuId,isChecked}){
       let result = await reqCheckCart(skuId,isChecked)
    //    console.log(result)
       //服务器没有返回多余的数据所以咱们不用在往下写三连环了
        if(result.code==200){
            return 'ok';
        }else{
            return Promise.reject(new Error('失败'))
        }
   },
   //删除全部勾选的产品
   deleteAllCheckedCart({dispatch,getters}){
       //我们利用context上下文参数获取里面的dispatch和state|getters中的skuId
        // console.log(getters.ShopCartList.cartInfoList)
        //获取购物车中全部的商品（是一个数组）
        let PromiseAll = [];
        getters.ShopCartList.cartInfoList.forEach(item=>{
           //如果勾选了就删除，不勾选不删除
           let promise = item.isChecked==1?dispatch('DeleteCartById',item.skuId):'';
           //将每一次返回的Promise添加到数组当中
           PromiseAll.push(promise)
        })
        //只要全部的Promise都成功，返回的结果即为成功，如果有一个失败结果即为失败
        return Promise.all(PromiseAll)
    },
    //修改全部产品的状态
    updateAllCartIsChecked({dispatch,getters},isChecked){
        //数组
        let PromiseAll = [];
        getters.ShopCartList.cartInfoList.forEach(item=>{
           let promise= dispatch('getCheckCart',{skuId:item.skuId,isChecked})
           PromiseAll.push(promise);
        })
        //最终返回结果
       return Promise.all(PromiseAll)
    }
}
//准备mutations 用于操作数据（state）
const mutations={
    //购物车数据
    GETSHOPCARTLIST(state,ShopCartList){
        state.ShopCartList=ShopCartList;
    }
}
//准备state 用于存储数据
const state={
    //购物车数据
    ShopCartList:[]
}
//准备getters 用于将state中的数据进行加工
//可以把我们将来在组件当中需要用的数据简化一下【将来组件获取数据就简单了】
const getters={
    ShopCartList(state){
        return state.ShopCartList[0]||{}
    },
}

export default{
    actions,
    mutations,
    state,
    getters
}